package gui.logado.minhaconta;

import conexao.Http;
import conexao.HttpData;
import conexao.HttpListener;
import gui.logado.mensagens.receber.Mensagem;
import gui.utilitarias.Comfirma;
import gui.utilitarias.ComfirmaListener;
import java.io.DataInputStream;
import java.io.IOException;
import javax.microedition.lcdui.*;
import net.sourceforge.floggy.persistence.*;
import recados.Recados;

public class MinhaConta extends List implements CommandListener, ComfirmaListener {

    private final Excluir excluir;
    private final Recados midlet;
    private final Command cmdVoltar;

    public MinhaConta(Recados midlet) {
        super("Minha Conta", IMPLICIT);

        this.midlet = midlet;

        excluir = new Excluir();

        cmdVoltar = new Command("Voltar", Command.BACK, 0);


        try {
            append("Alterar Foto", Image.createImage("/gui/logado/minhaconta/imagem.png"));
            append("Meu Perfil", Image.createImage("/gui/logado/minhaconta/perfil.png"));
            append("Trocar Senha", Image.createImage("/gui/logado/minhaconta/key.png"));
            append("Excluir Conta", Image.createImage("/gui/logado/minhaconta/userdelete.png"));
        } catch (IOException ex) {
        }

        addCommand(cmdVoltar);

        setCommandListener(this);
    }

    public void commandAction(Command c, Displayable d) {
        if (c == List.SELECT_COMMAND) {
            switch (getSelectedIndex()) {
                case 0:
                    Recados.setCurrent(new Foto());
                    break;
                case 1:
                    Recados.setCurrent(new MeuPerfil());
                    break;
                case 2:
                    Recados.setCurrent(midlet.getTrocasenha());
                    break;
                case 3:
                    Comfirma comf = new Comfirma(this, "Excluir conta", "Voçê tem certeza?");
                    comf.setListener(this);
                    Recados.setCurrent(comf);
                    break;
            }
        } else if (c == cmdVoltar) {
            Recados.setCurrent(midlet.getPrincipal());
        }
    }

    public void retornoComfirma(int id, int retorno) {
        if (retorno == Comfirma.SIM) {
            excluir.run();
        } else if (retorno == Comfirma.NAO) {
            Recados.setCurrent(this);
        }
    }

    private class Excluir implements HttpListener {

        public void run() {
            Http http = new Http("Excluindo");

            HttpData dados = new HttpData();
            http.setHttpData(dados);

            dados.setPagina("/deleta_usuario.php");
            http.setListener(this);

            dados.put("nome", midlet.getLoginConfig().getNome());
            dados.put("senha", midlet.getLoginConfig().getSenha());

            Recados.setCurrent(http);

            http.doPost(false);
        }

        public void requisicaoCancelada() {
            Recados.setCurrent(midlet.getAvancado());
        }

        public void falhaRequisiçao(String mensagem) {
            Recados.setCurrent(new Alert("Erro", mensagem, null, AlertType.ERROR), midlet.getAvancado());
        }

        public void requisicaoConcluida(DataInputStream in) {
            String primeiraLinha = Http.readLine(in);

            if (primeiraLinha.equals("erro")) {
                String segundaLinha = Http.readLine(in);
                Recados.setCurrent(new Alert("Erro", segundaLinha, null, AlertType.ERROR), midlet.getAvancado());
            } else if (primeiraLinha.equals("ok")) {
                PersistableManager pm = PersistableManager.getInstance();
                try {
                    ObjectSet mym = pm.find(Mensagem.class, new Filter() {

                        public boolean matches(Persistable prstbl) {
                            Mensagem m = (Mensagem) prstbl;
                            return m.getPara().equals(midlet.getLoginConfig().getNome());
                        }
                    }, null);

                    for (int i = 0; i < mym.size(); i++) {
                        pm.delete(mym.get(i));
                    }

                } catch (FloggyException ex) {
                    Recados.setCurrent(new Alert("Erro", "Problema ao excluir dados da memoria", null, AlertType.ERROR));
                }

                //Limpar dados do login corrente e da memoria
                midlet.getLoginConfig().setNome("");
                midlet.getLoginConfig().setSenha("");
                midlet.getLoginConfig().salva();

                //Limpar tela de login
                midlet.getLogin().campoNome.setString("");
                midlet.getLogin().campoSenha.setString("");

                Recados.setCurrent(midlet.getLogin());

                //Dealocar recursos
                midlet.delogged();
            }
        }
    }
}